﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Didsoft.DataAccess.NHibernate;
using Boa.HD.AccesoDatos.Entidades.DTO;
using Boa.HD.AccesoDatos.Contratos;
using Didsoft.DataAccess.NHibernate.Extensions;

namespace Boa.HD.AccesoDatos.Contexto
{
    public class BOAPersonalAccesoDatos : DataAccessBase<DtoBOAPersonal>, IDtoBOAPersonal
    {

        public DtoBOAPersonal BuscarUsuario(string usuario, string contrasena)
        {
            string sql = @"select EmpleadoId = e.empleadoID, 
                                 EmpleadoNombre = e.Nombre1,
                                 EmpleadoApellidoPaterno = e.Apellido1,
                                 EmpleadoApellidoMaterno = e.Apellido2,
                                 ItemId = i.itemID,
                                 CargoId = c.CargoID,
                                 CargoNombre = c.Nombre,
                                 OrganigramaId = o.organigramaID,
                                 OrganigramaNombre = o.Nombre,
                                 NivelJerarquicoId = nj.nivelJerarquicoID,
                                 NivelJerarquico = nj.nivel,
                                 JerarquiaNombre = nj.Nombre,
                                 TipoContratoId = tc.tipoContratoID,
                                 TipoContratoNombre = tc.Nombre,
                                 OficinaId = ofi.OficinaID,
                                 OficinaNombre = ofi.Nombre,
                                 CiudadId = ofi.ciudadID,
                                 UsuarioEmpleadoId = ue.UsuarioEmpleadoID,
                                 UsuarioNombre = ue.usuario,
                                 UsuarioPassword = ue.password
		   
  
                            from BOAPERSONAL.Personal.dbo.Empleado e
                            inner join BOAPERSONAL.Personal.dbo.HistorialCargo hc on hc.empleadoID = e.empleadoID
                            inner join BOAPERSONAL.Personal.dbo.Item i on hc.itemID = i.itemID
                            inner join BOAPERSONAL.Personal.dbo.TipoContrato tc on tc.tipoContratoID = i.tipoContratoID
                            inner join BOAPERSONAL.Personal.dbo.Cargo c on c.CargoID = i.CargoID
                            inner join BOAPERSONAL.Personal.dbo.Organigrama o on o.organigramaID = i.organigramaID
                            inner join BOAPERSONAL.Personal.dbo.NivelJerarquico nj on nj.nivelJerarquicoID = o.nivelJerarquicoID
                            inner join BOAPERSONAL.Personal.dbo.Oficina ofi on ofi.oficinaID = e.OficinaID
                            left join BOAPERSONAL.Personal.dbo.UsuarioEmpleado ue on ue.empleadoID = e.empleadoID
                          where hc.Estado = 1 AND ue.Usuario = :usuario AND ue.password = :contrasena";

            var query = Session.CreateSQLQuery(sql);
            query.SetAnsiString("usuario", usuario);
            query.SetAnsiString("contrasena", contrasena);

            return query.ListBeanTransformer<DtoBOAPersonal>().FirstOrDefault();

        }

        public IList<DtoBOAPersonal> TodoPersonalBoa()
        {
            string sql = @"select EmpleadoId = e.empleadoID, 
                                 EmpleadoNombre = e.Nombre1,
                                 EmpleadoApellidoPaterno = e.Apellido1,
                                 EmpleadoApellidoMaterno = e.Apellido2,
                                 ItemId = i.itemID,
                                 CargoId = c.CargoID,
                                 CargoNombre = c.Nombre,
                                 OrganigramaId = o.organigramaID,
                                 OrganigramaNombre = o.Nombre,
                                 NivelJerarquicoId = nj.nivelJerarquicoID,
                                 NivelJerarquico = nj.nivel,
                                 JerarquiaNombre = nj.Nombre,
                                 TipoContratoId = tc.tipoContratoID,
                                 TipoContratoNombre = tc.Nombre,
                                 OficinaId = ofi.OficinaID,
                                 OficinaNombre = ofi.Nombre,
                                 CiudadId = ofi.ciudadID,
                                 UsuarioEmpleadoId = ue.UsuarioEmpleadoID,
                                 UsuarioNombre = ue.usuario,
                                 UsuarioPassword = ue.password
		   
  
                            from BOAPERSONAL.Personal.dbo.Empleado e
                            inner join BOAPERSONAL.Personal.dbo.HistorialCargo hc on hc.empleadoID = e.empleadoID
                            inner join BOAPERSONAL.Personal.dbo.Item i on hc.itemID = i.itemID
                            inner join BOAPERSONAL.Personal.dbo.TipoContrato tc on tc.tipoContratoID = i.tipoContratoID
                            inner join BOAPERSONAL.Personal.dbo.Cargo c on c.CargoID = i.CargoID
                            inner join BOAPERSONAL.Personal.dbo.Organigrama o on o.organigramaID = i.organigramaID
                            inner join BOAPERSONAL.Personal.dbo.NivelJerarquico nj on nj.nivelJerarquicoID = o.nivelJerarquicoID
                            inner join BOAPERSONAL.Personal.dbo.Oficina ofi on ofi.oficinaID = e.OficinaID
                            left join BOAPERSONAL.Personal.dbo.UsuarioEmpleado ue on ue.empleadoID = e.empleadoID
                            where hc.Estado = 1
                            order by e.Apellido1,e.Apellido2,e.Nombre1";

            var query = Session.CreateSQLQuery(sql);


            return query.ListBeanTransformer<DtoBOAPersonal>();

        }



        public DtoBOAPersonal BuscarPorId(int PersonalSeleccionado)
        {
            string sql = @"select EmpleadoId = e.empleadoID, 
                                 EmpleadoNombre = e.Nombre1,
                                 EmpleadoApellidoPaterno = e.Apellido1,
                                 EmpleadoApellidoMaterno = e.Apellido2,
                                 ItemId = i.itemID,
                                 CargoId = c.CargoID,
                                 CargoNombre = c.Nombre,
                                 OrganigramaId = o.organigramaID,
                                 OrganigramaNombre = o.Nombre,
                                 NivelJerarquicoId = nj.nivelJerarquicoID,
                                 NivelJerarquico = nj.nivel,
                                 JerarquiaNombre = nj.Nombre,
                                 TipoContratoId = tc.tipoContratoID,
                                 TipoContratoNombre = tc.Nombre,
                                 OficinaId = ofi.OficinaID,
                                 OficinaNombre = ofi.Nombre,
                                 CiudadId = ofi.ciudadID,
                                 UsuarioEmpleadoId = ue.UsuarioEmpleadoID,
                                 UsuarioNombre = ue.usuario,
                                 UsuarioPassword = ue.password
		   
  
                            from BOAPERSONAL.Personal.dbo.Empleado e
                            inner join BOAPERSONAL.Personal.dbo.HistorialCargo hc on hc.empleadoID = e.empleadoID
                            inner join BOAPERSONAL.Personal.dbo.Item i on hc.itemID = i.itemID
                            inner join BOAPERSONAL.Personal.dbo.TipoContrato tc on tc.tipoContratoID = i.tipoContratoID
                            inner join BOAPERSONAL.Personal.dbo.Cargo c on c.CargoID = i.CargoID
                            inner join BOAPERSONAL.Personal.dbo.Organigrama o on o.organigramaID = i.organigramaID
                            inner join BOAPERSONAL.Personal.dbo.NivelJerarquico nj on nj.nivelJerarquicoID = o.nivelJerarquicoID
                            inner join BOAPERSONAL.Personal.dbo.Oficina ofi on ofi.oficinaID = e.OficinaID
                            left join BOAPERSONAL.Personal.dbo.UsuarioEmpleado ue on ue.empleadoID = e.empleadoID
                            where hc.Estado = 1 AND e.EmpleadoId = :PersonalSeleccionado";

            var query = Session.CreateSQLQuery(sql);
            query.SetInt32("PersonalSeleccionado", PersonalSeleccionado);
            return query.ListBeanTransformer<DtoBOAPersonal>().FirstOrDefault();
        }



        public IList<DtoAITEquipoEmpleado> GetEquiposPorEmpleadoId(int EmpleadoId)
        { 
          string sql = @"   select 
                                GuidAsignacion = ae.Guid,
                                EmpleadoId = ae.EmpleadoId,
                                FechaEntrega = ae.FechaEntrega,
                                AlmacenId = almacen.AlmacenEmpresaId,
                                AlmacenNombre = almacen.NombreAlmacen,
                                RegionId = r.RegionId,
                                RegionNombre = r.Nombre,
                                EquipoId = e.EquipoId,
                                EquipoCodigo = e.Codigo,
                                EquipoSerial = e.CodigoSerialNumber,
                                EquipoFactura = e.NumFactura,
                                EquipoDescripcion = e.Descripcion,
                                TipoEquipoId = te.TipoEquipoId,
                                TipoEquipoPatronEnum = te.TipoEquipoEnum,
                                TipoEquipoCodigo = te.codigo,
                                TipoEquipoNombre = te.Nombre,
                                ModeloId = me.ModeloEquipoId,
                                ModeloNombre = me.Nombre,
                                MarcaId = marcae.MarcaEquipoId,
                                MarcaNombre = marcae.Nombre,
                                GarantiaId = ag.GarantiaId,
                                GarantiaInicio = ag.FechaInicio,
                                GarantiaFin = ag.FechaFin,
                                GarantiaNumDoc = ag.NumDocumentoGarantia,
                                ProveedorId = p.ProveedorId,
                                ProveedorNombre = p.Nombre                           
                            
                           from BOAINVENTARIOIT.AIT.dbo.AIT_AsignaEmpleado ae
                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_AsignarEquipoAlmacen aea on aea.AsignarEquipoAlmacenId = ae.AsignarEquipoAlmacenId
                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_AlmacenEmpresa almacen on almacen.AlmacenEmpresaId = aea.AlmacenEmpresaId
                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_Region r on r.RegionId = almacen.RegionId

                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_EquipoDisponible ed on ed.EquipoDisponibleId = aea.EquipoDisponibleId
                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_EquipoDisponibleItem edi on edi.EquipoDisponibleId = ed.EquipoDisponibleId

                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_EquipoIT e on e.EquipoId = edi.EquipoId
                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_ModeloEquipo me on me.ModeloEquipoId = e.ModeloEquipoId
                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_TipoEquipo te on te.TipoEquipoId = me.TipoEquipoId
                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_MarcaEquipo marcae on marcae.MarcaEquipoId = me.MarcaEquipoId
                            left join BOAINVENTARIOIT.AIT.dbo.AIT_Garantia ag on ag.EquipoId = e.EquipoId	
                            left join BOAINVENTARIOIT.AIT.dbo.AIT_Proveedor p on p.ProveedorId = ag.ProveedorId and e.ProveedorId = p.ProveedorId

                            
                            where ae.EmpleadoId = :EmpleadoId";


          var query = Session.CreateSQLQuery(sql);
          query.SetInt32("EmpleadoId", EmpleadoId);
          return query.ListBeanTransformer<DtoAITEquipoEmpleado>();
        
        }


        public DtoAITEquipoEmpleado GetEquipo(int equipoId)
        {
            string sql = @"   select 
                                GuidAsignacion = ae.Guid,
                                EmpleadoId = ae.EmpleadoId,
                                FechaEntrega = ae.FechaEntrega,
                                AlmacenId = almacen.AlmacenEmpresaId,
                                AlmacenNombre = almacen.NombreAlmacen,
                                RegionId = r.RegionId,
                                RegionNombre = r.Nombre,
                                EquipoId = e.EquipoId,
                                EquipoCodigo = e.Codigo,
                                EquipoSerial = e.CodigoSerialNumber,
                                EquipoFactura = e.NumFactura,
                                EquipoDescripcion = e.Descripcion,
                                TipoEquipoId = te.TipoEquipoId,
                                TipoEquipoPatronEnum = te.TipoEquipoEnum,
                                TipoEquipoCodigo = te.codigo,
                                TipoEquipoNombre = te.Nombre,
                                ModeloId = me.ModeloEquipoId,
                                ModeloNombre = me.Nombre,
                                MarcaId = marcae.MarcaEquipoId,
                                MarcaNombre = marcae.Nombre,
                                GarantiaId = ag.GarantiaId,
                                GarantiaInicio = ag.FechaInicio,
                                GarantiaFin = ag.FechaFin,
                                GarantiaNumDoc = ag.NumDocumentoGarantia,
                                ProveedorId = p.ProveedorId,
                                ProveedorNombre = p.Nombre
    
                            from BOAINVENTARIOIT.AIT.dbo.AIT_AsignaEmpleado ae
                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_AsignarEquipoAlmacen aea on aea.AsignarEquipoAlmacenId = ae.AsignarEquipoAlmacenId
                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_AlmacenEmpresa almacen on almacen.AlmacenEmpresaId = aea.AlmacenEmpresaId
                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_Region r on r.RegionId = almacen.RegionId
    
	                        inner join BOAINVENTARIOIT.AIT.dbo.AIT_EquipoDisponible ed on ed.EquipoDisponibleId = aea.EquipoDisponibleId
	                        inner join BOAINVENTARIOIT.AIT.dbo.AIT_EquipoDisponibleItem edi on edi.EquipoDisponibleId = ed.EquipoDisponibleId
    
                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_EquipoIT e on e.EquipoId = edi.EquipoId    
                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_ModeloEquipo me on me.ModeloEquipoId = e.ModeloEquipoId
                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_TipoEquipo te on te.TipoEquipoId = me.TipoEquipoId
                            inner join BOAINVENTARIOIT.AIT.dbo.AIT_MarcaEquipo marcae on marcae.MarcaEquipoId = me.MarcaEquipoId
                            left join BOAINVENTARIOIT.AIT.dbo.AIT_Garantia ag on ag.EquipoId = e.EquipoId	
                            left join BOAINVENTARIOIT.AIT.dbo.AIT_Proveedor p on p.ProveedorId = ag.ProveedorId
                            
                            where e.equipoId = :equipoId";


            var query = Session.CreateSQLQuery(sql);
            query.SetInt32("equipoId", equipoId);
            return query.ListBeanTransformer<DtoAITEquipoEmpleado>().FirstOrDefault();
        }


        public IList<DtoTipoEquipoAIT> GetTipoEquipos()
        {
            string sql = @" select 
                               te.TipoEquipoId,
                               NombreTipo = te.Codigo +' - '+te.Nombre,
                               te.TipoEquipoEnum
                             from BOAINVENTARIOIT.AIT.dbo.AIT_TipoEquipo te";
            var query = Session.CreateSQLQuery(sql);           
            return query.ListBeanTransformer<DtoTipoEquipoAIT>();
        }


        public IList<DtoBOANivelJerarquico> GetBoaNivelesJerarquia()
        {
            string sql = @"select 
                              NivelJerarquicoId = nj.nivelJerarquicoID,
                              nj.Nombre,
                              nj.Nivel

                         from BOAPERSONAL.Personal.dbo.NivelJerarquico nj";

            var query = Session.CreateSQLQuery(sql);
            return query.ListBeanTransformer<DtoBOANivelJerarquico>();
        }


        public IList<DtoBOACargo> GetBoaCargos()
        {
            string sql = @"select 
                              CargoID = c.CargoID,
                              Nombre = c.Nombre  

                            from BOAPERSONAL.Personal.dbo.Cargo c
                            order by c.Nombre";

            var query = Session.CreateSQLQuery(sql);
            return query.ListBeanTransformer<DtoBOACargo>();
        }

    }
}
